/**
 * 描述: jwt-token验证和解析函数
 * 作者: HIKE
 * 日期: 
 */

const jwt = require('jsonwebtoken'); // 引入验证jsonwebtoken模块
const expressJwt = require('express-jwt'); // 引入express-jwt模块
const { PRIVATE_KEY, JWT_EXPIRED } = require('./constant'); // 引入自定义的jwt密钥

// 验证token是否过期
const jwtAuth = expressJwt({
    // 设置密钥
    secret: PRIVATE_KEY,
    //设置HS256编码,6.0.0版本后修改
    algorithms: ['HS256'],
    // 设置为true表示校验，false表示不校验
    credentialsRequired: true,
    // 自定义获取token的函数
    getToken: (req) => {
            if (req.headers.authorization) {
                return req.headers.authorization
            } else if (req.cookies.token) {
                return req.cookies.token
            }
        }
        // 设置jwt认证白名单，比如/api/login登录接口不需要拦截
}).unless({
    path: [
        '/', //首页不拦截
        '/api/login', //登录不拦截
        '/api/register', //注册不拦截
        '/static/', //静态资源不拦截
        '/api/wxService', //接受微信发送的用户信息不拦截
        '/api/sms', //获取短信验证不拦截
        '/api/userinfo',
        '/api/getCode', //微信发送code不拦截
        '/api/exit', //用户退出不拦截
        '/api/discountCard', //大桥扫码登录不拦截
        '/api/sendMessage',
        '/api/sendMsgToAll', //发送司机状态消息不做拦截
        '/api/demo',
        '/api/demo1',
        '/api/demo2'
    ]
})


//jwt - token解析
function decode(req) {
    const token = req.get('Authorization')
    return jwt.verify(token, PRIVATE_KEY);
}


module.exports = {
    jwtAuth,
    decode
}